package com.phonetools.commonutils.android.intent

import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Build
import androidx.core.content.FileProvider
import com.phonetools.commonutils.android.mime.getMIMEType
import java.io.File

/**
 * 从[file]获取Uri，适配android7.0
 * @param context
 * @param file
 * @param fileProvider
 * @return Uri
 */
fun getUri(context: Context, file: File, fileProvider: String): Uri =
    if (Build.VERSION.SDK_INT >= 24) { //判断版本是否在7.0以上
        FileProvider.getUriForFile(context, fileProvider, file)
    } else {//android 6.0或以下
        Uri.fromFile(file)
    }

/**
 * 获取用于发送[file]的intent
 * @param context
 * @param file 要发送的文件
 * @param fileProvider string
 * @param fileType 未指定时，由file根据扩展名获取MIME type
 * @return Intent
 */
fun getSendIntent(
    context: Context,
    file: File, fileProvider: String,
    fileType: String = ""
): Intent {
    val intent = Intent(Intent.ACTION_SEND)
    intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
    val uri = getUri(context, file, fileProvider)
    if (Build.VERSION.SDK_INT >= 24) { //判断版本是否在7.0以上
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
    }
    intent.putExtra(Intent.EXTRA_STREAM, uri)
    val type = if (fileType.isNotEmpty()) {
        getMIMEType(fileType)
    } else {
        getMIMEType(file)
    }
    intent.setDataAndType(uri, type)
    return intent
}

/**
 * 调用打开[file]
 * @param context
 * @param file 要打开的文件
 * @param fileProvider
 * @param fileType 未指定时，由file根据扩展名获取MIME type
 * @param packageName 要打开的指定app包名，未指定时，由系统根据type弹出打开菜单
 * @return Intent
 */
fun getViewIntent(
    context: Context,
    file: File, fileProvider: String,
    fileType: String = "", packageName: String = ""
): Intent {
    val intent = Intent(Intent.ACTION_VIEW)
    //intent.addCategory(Intent.CATEGORY_DEFAULT)
    //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) 不可以添加 否则切换printershare的wifi会无法维持
    val uri = getUri(context, file, fileProvider)
    if (Build.VERSION.SDK_INT >= 24) { //判断版本是否在7.0以上
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
    }
    val type = if (fileType.isNotEmpty()) {
        getMIMEType(fileType)
    } else {
        getMIMEType(file)
    }
    if (packageName.isNotEmpty()) {
        intent.setPackage(packageName)
    }
    intent.setDataAndType(uri, type)
    return intent
}

/**
 * 调用打开Url[url]
 * @param url 要打开的Url
 * @param fileType 未指定时，由file根据扩展名获取MIME type
 * @return Intent
 */
fun getUrlViewIntent(url: String, fileType: String): Intent {
    val intent = Intent(Intent.ACTION_VIEW)
    //intent.addCategory(Intent.CATEGORY_DEFAULT)
    //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    val mimeType = getMIMEType(fileType)
    intent.setDataAndType(Uri.parse(url), mimeType)
    return intent
}

/**
 * 调用打开Url[url]
 * @param url 要打开的Url
 * @return Intent
 */
fun getUrlViewIntent(url: String): Intent {
    val intent = Intent(Intent.ACTION_VIEW)
    intent.data = Uri.parse(url)
    return intent
}